package com.grace.law.event;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.springframework.web.context.support.WebApplicationContextUtils;

/**

 * (1)Listener的生命周期是由servlet容器（例如tomcat）管理的，项目启动时上例中的ConfigListener是由servlet容器实例化并调用其contextInitialized方法，而servlet容器并不认得@Autowired注解，因此导致ConfigService实例注入失败。

 * 

 * (2)而spring容器中的bean的生命周期是由spring容器管理的。

 * 

 * 4.那么该如何在spring容器外面获取到spring容器bean实例的引用呢？这就需要用到spring为我们提供的WebApplicationContextUtils工具类，该工具类的作用是获取到spring容器的引用，进而获取到我们需要的bean实例。

 * 注意：以上代码有一个前提，那就是servlet容器在实例化ConfigListener并调用其方法之前，要确保spring容器已经初始化完毕！而spring容器的初始化也是由Listener（ContextLoaderListener）完成，因此只需在web.xml中先配置初始化spring容器的Listener，然后在配置自己的Listener，

 * 

 * @author zhouyang

 *

 */
public class ConfigListener implements ServletContextListener {

	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		// TODO Auto-generated method stub

	}

	public void contextInitialized(ServletContextEvent sce) {
		ConfigService configService = WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext())
				.getBean(ConfigService.class);
		configService.initConfig();
		System.out.println("========================初始化容器");
	}

}
